function main(){
     //获取canvas元素
     var canvas = document.getElementById('webgl');
     //获取绘制二维上下文
     var gl = canvas.getContext('webgl');
     if (!gl) {
        console.log("Failed");
        return;
    }

    // 顶点着色器和片段着色器生成
    var v_shader = create_shader(gl,"vs");
    var f_shader = create_shader(gl,"fs");

    // 程序对象的生成和连接
    var program = create_program(gl,v_shader, f_shader);
    //获取a_Position变量的存储位置
    var a_Position = gl.getAttribLocation(program, "a_Position");

   if (a_Position < 0) {
       console.log('Failed to get the storage location of a_Position');
       return;
   }

    var n = initBuffers(gl, program);

    if (n < 0) {
        console.log('Failed to set the positions');
        return;
    }
   // 清除指定<画布>的颜色
   gl.clearColor(0.0, 0.0, 0.0, 1.0);
   // 清空 <canvas>
   gl.clear(gl.COLOR_BUFFER_BIT);
   gl.drawArrays(gl.TRIANGLES, 0,3);
   gl.drawArrays(gl.POINT,0,1);
}

function create_shader(gl,id) {
    // 用来保存着色器的变量
    var shader;
    // 根据id从HTML中获取指定的script标签
    var scriptElement = document.getElementById(id);
    // 如果指定的script标签不存在，则返回
    if (!scriptElement) {
        return;
    }
    // 判断script标签的type属性
    switch (scriptElement.type) {
        // 顶点着色器的时候
        case 'x-shader/x-vertex':
            shader = gl.createShader(gl.VERTEX_SHADER);//生成顶点着色器
            break;
        // 片段着色器的时候
        case 'x-shader/x-fragment':
            shader = gl.createShader(gl.FRAGMENT_SHADER);//生成片元着色器
            break;
        default :
            return;
    }
    // 将标签中的代码分配给生成的着色器
    gl.shaderSource(shader, scriptElement.text);
    // 编译着色器
    gl.compileShader(shader);
    // 判断一下着色器是否编译成功
    if (gl.getShaderParameter(shader, gl.COMPILE_STATUS)) {
        // 编译成功，则返回着色器
        return shader;
    } else {
        // 编译失败，弹出错误消息
        alert(gl.getShaderInfoLog(shader));
    }
}
function create_program(gl,vs, fs) {
    // 程序对象的生成
    var program = gl.createProgram();
    // 向程序对象里分配着色器
    gl.attachShader(program, vs);
    gl.attachShader(program, fs);
    // 将着色器连接
    gl.linkProgram(program);
    // 判断着色器的连接是否成功
    if (gl.getProgramParameter(program, gl.LINK_STATUS)) {
        // 成功的话，将程序对象设置为有效
        gl.useProgram(program);
        // 返回程序对象
        return program;
    } else {
        // 如果失败，弹出错误信息
        alert(gl.getProgramInfoLog(program));
    }
}

function initBuffers(gl,shaderProgram) {
    var vertices = new Float32Array([
        0.0, 0.5, -0.5, -0.5, 0.5, -0.5
    ]);
    var n = 3;//点的个数
    //创建缓冲区对象
    var vertexBuffer = gl.createBuffer();
    if(!vertexBuffer){
        console.log("Failed to create the butter object");
        return -1;
    }
     //将缓冲区对象绑定到目标
    gl.bindBuffer(gl.ARRAY_BUFFER,vertexBuffer);
    //向缓冲区写入数据
    gl.bufferData(gl.ARRAY_BUFFER,vertices,gl.STATIC_DRAW);
    //获取坐标点
    var a_Position = gl.getAttribLocation(shaderProgram, 'a_Position');
    //将缓冲区对象分配给a_Position变量
    gl.vertexAttribPointer(a_Position, 2, gl.FLOAT, false, 0, 0);
    //连接a_Position变量与分配给它的缓冲区对象
    gl.enableVertexAttribArray(a_Position);
    return n;

}

// // 顶点着色器程序
// var VSHADER_SOURCE = 
//   'void main() {\n' +
//   '  gl_Position = vec4(0.0, 0.0, 0.0, 1.0);\n' + // Set the vertex cordinates of the point
//   '  gl_PointSize = 30.0;\n' +                    // Set the point size
//   '}\n';

// // 片元着色器程序
// var FSHADER_SOURCE =
//   'void main() {\n' +
//   '  gl_FragColor = vec4(1.0, 1.0, 0.0, 1.0);\n' + // Set the point color
//   '}\n';
// function main() {
//   // 获取 <canvas> 元素
//   var canvas = document.getElementById('webgl');

//   // 获取WebGL渲染上下文
//   var gl = getWebGLContext(canvas);
//   if (!gl) {
//     console.log('Failed to get the rendering context for WebGL');
//     return;
//   }

//   // 初始化着色器
//   if (!initShaders(gl, VSHADER_SOURCE, FSHADER_SOURCE)) {
//     console.log('Failed to intialize shaders.');
//     return;
//   }

//   // 指定清空<canvas>的颜色
//   gl.clearColor(0.0, 0.0, 0.0, 1.0);

//   // 清空<canvas>
//   gl.clear(gl.COLOR_BUFFER_BIT);

//   // 绘制一个点
//   gl.drawArrays(gl.POINTS, 0, 1);
// }